What is a Future in Scala and how does it work